package com.xxg.renrensearch.repository;

import com.xxg.renrensearch.dao.RenrenShopShop;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

/**
 * 店铺索引库操作接口
 *
 * @author xuxiaogang
 * @date 2021-11-19
 */
public interface RenrenShopShopRepository extends ElasticsearchRepository<RenrenShopShop, Integer> {
    /**
     * 根据地区代码查询店铺（地区代码优先）
     *
     * @param cityCode 地区代码
     * @param page     分页信息
     * @return 结果
     */
    @Query("{\"bool\":{\"must\":{\"match_all\":{}},\"should\":{\"term\":{\"cityCode\":\"?0\"}}}}")
    Page<RenrenShopShop> myFindByCityCode(Integer cityCode, Pageable page);

    /**
     * 在全国范围内根据关键词查询店铺
     *
     * @param name 关键词
     * @param page 分页信息
     * @return 结果
     */
    @Query("{\"bool\":{\"must\":{\"match\":{\"name\":\"?0\"}}}}")
    Page<RenrenShopShop> findByName(String name, Pageable page);

    /**
     * 根据店铺名称关键词和地区代码查询店铺（关键词必须，地区代码优先）
     *
     * @param name     关键词
     * @param cityCode 地区代码
     * @param page     分页信息
     * @return 结果
     */
    @Query("{\"bool\":{\"must\":{\"match\":{\"name\":\"?0\"}},\"should\":{\"term\":{\"cityCode\":\"?1\"}}}}")
    Page<RenrenShopShop> myFindByNameOrCityCode(String name, Integer cityCode, Pageable page);
}